﻿#=====================================================================================================================
# Fonctions
#=====================================================================================================================
function FileInfoToTable
{
    param
    (
        [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
        [System.IO.FileInfo]$FileInfo
    )
    process
    {
        Try
        {           
            $command.CommandText = [string]::Format($insertQueryFormat, `
                    $FileInfo.DirectoryName.Replace("'", "''"), `
                    $FileInfo.Name.Replace("'", "''"))

            #Write-Host $command.CommandText
            $command.ExecuteNonQuery() | Out-Null
        }
        catch
        {
            Write-Host "line $lineIndex :: $line" -f Red
            Write-Host $_ -f Red
        }
    }
}

#=====================================================================================================================
# Paramètres
#=====================================================================================================================

    #Chemin courant
    $scriptDir = Split-Path $MyInvocation.MyCommand.Path -Parent

    # Dossier source
    $folderToScan = "a:\"

    # Paramètres concernant la base de données
    $database = "$scriptDir\Lots_Files.db"
    $emptyDb = "$scriptDir\empty.db"
    $connStr = "Data Source = $database"

    $dropTableQuery = "drop table Files"
    $createTableQuery = "CREATE TABLE Files (`"Folder`" TEXT, `"File`" TEXT)"
    $insertQueryFormat = "Insert INTO Files(Folder, File) Values ('{0}', '{1}')"

#=====================================================================================================================
# Initialisations
#=====================================================================================================================
    
    [System.Reflection.Assembly]::LoadFile("$scriptDir\System.Data.SQLite.dll")

    # Création de la base de données si elle est manquante
    if(-not([System.IO.Directory]::Exists($database)))
    {
        Copy-Item $emptyDb $database
    }

    # Ouverture de la connexion
    $conn = New-Object System.Data.SQLite.SQLiteConnection($connStr)
    $conn.Open()
    $command = $conn.CreateCommand()

    # Suppression de la table
    try
    {
        $command.CommandText = $dropTableQuery
        $RowsInserted = $command.ExecuteNonQuery()
    }
    catch
    {
        # No action
    }

    # Création de la table
    $command.CommandText = $createTableQuery
    $command.ExecuteNonQuery()


#=====================================================================================================================
# Traitements
#=====================================================================================================================
  
    # Création des lignes en base
    dir $folderToScan -Recurse -File | %{FileInfoToTable $_}

    Write-Host "Traitement effectué"

#=====================================================================================================================
# Post-Traitements
#=====================================================================================================================
    $command.Dispose()